/**
 * 时间格式化
 * @param {Object} date
 */

import moment from 'moment-timezone'


export function dateTransform (time,timezone) {
 
  if (!time) {
    return
  }

  var thisTime = time;
  thisTime = thisTime.replace(/-/g, '/');
  // var time2 = new Date(thisTime);
  
  // console.log("time",time)
  var time2 = moment(time)  
 // console.log(time2)
  var timestamp = time2.valueOf()//time2.getTime();
  // console.log(timestamp)
  
  var mustIncludeTime = true;
  // 当前时间

  var currentDate = moment().tz(timezone);
  // 目标判断时间
  var srcDate = new Date(parseInt(timestamp));

  var currentYear = currentDate.year()//currentDate.getFullYear();
  var currentMonth = currentDate.month() + 1;//(currentDate.getMonth() + 1);
  var currentDateD = currentDate.date()//currentDate.getDate();

  var srcYear = srcDate.getFullYear();
  var srcMonth = (srcDate.getMonth() + 1);
  var srcDateD = srcDate.getDate();

  var ret = "";

  // 要额外显示的时间分钟
  var timeExtraStr = (mustIncludeTime ? " " + _formatDate(srcDate, "hh:mm") : "");

  // 当年
  if (currentYear == srcYear) {
    var currentTimestamp = currentDate.valueOf()//currentDate.getTime();
    var srcTimestamp = timestamp;
    // 相差时间（单位：毫秒）
    var deltaTime = (currentTimestamp - srcTimestamp);

    // 当天（月份和日期一致才是）
    if (currentMonth == srcMonth && currentDateD == srcDateD) {
      // 时间相差60秒以内
      if (deltaTime < 60 * 1000)
        ret = "刚刚";
      // 否则当天其它时间段的，直接显示“时:分”的形式
      else
        ret = _formatDate(srcDate, "今天 hh:mm");
    }
    // 当年 && 当天之外的时间（即昨天及以前的时间）
    else {
      // 昨天（以“现在”的时候为基准-1天）
      var yesterdayDate = new Date();
      yesterdayDate.setDate(yesterdayDate.getDate() - 1);
	  let yesterdayMoment = moment(yesterdayDate).tz(timezone)

      // 前天（以“现在”的时候为基准-2天）
      var beforeYesterdayDate = new Date();
      beforeYesterdayDate.setDate(beforeYesterdayDate.getDate() - 2);
	  let beforeYesterdayMoment = moment(beforeYesterdayDate).tz(timezone)

      // 用目标日期的“月”和“天”跟上方计算出来的“昨天”进行比较，是最为准确的（如果用时间戳差值
      // 的形式，是不准确的，比如：现在时刻是2019年02月22日1:00、而srcDate是2019年02月21日23:00，
      // 这两者间只相差2小时，直接用“deltaTime/(3600 * 1000)” > 24小时来判断是否昨天，就完全是扯蛋的逻辑了）
      if (srcMonth == (yesterdayMoment.month() + 1) && srcDateD == yesterdayMoment.date())
        ret = "昨天" + timeExtraStr; // -1d
      // “前天”判断逻辑同上
      else if (srcMonth == (beforeYesterdayMoment.month() + 1) && srcDateD == beforeYesterdayMoment.date())
        ret = "前天" + timeExtraStr; // -2d
      else {
        // 跟当前时间相差的小时数
        var deltaHour = (deltaTime / (3600 * 1000));

        // 如果小于或等 7*24小时就显示星期几
        if (deltaHour <= 7 * 24) {
          var weekday = new Array(7);
          weekday[0] = "星期日";
          weekday[1] = "星期一";
          weekday[2] = "星期二";
          weekday[3] = "星期三";
          weekday[4] = "星期四";
          weekday[5] = "星期五";
          weekday[6] = "星期六";

          // 取出当前是星期几
          var weedayDesc = weekday[srcDate.getDay()];
          // ret = weedayDesc + timeExtraStr;
		  ret = weedayDesc;
        }
        // 否则直接显示完整日期时间
        else
          // ret = _formatDate(srcDate, "yyyy/M/d") + timeExtraStr;
		  ret = _formatDate(srcDate, "M月d号");
      }
    }
  }
  // 往年
  else {
    // ret = _formatDate(srcDate, "yyyy/M/d") + timeExtraStr;
	ret = _formatDate(srcDate, "yyyy/M/d");
  }

  return ret;

}

var _formatDate = function (date, fmt) {
  var o = {
    "M+": date.getMonth() + 1, //月份
    "d+": date.getDate(), //日
    "h+": date.getHours(), //小时
    "m+": date.getMinutes(), //分
    "s+": date.getSeconds(), //秒
    "q+": Math.floor((date.getMonth() + 3) / 3), //季度
    "S": date.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[
      k]).substr(("" + o[k]).length)));
  return fmt;
};
